#ifndef MWIN_H
#define MWIN_H

#include <QMainWindow>
#include <QLabel>
#include "client.h"
#include "logondialog.h"
#include "diausers.h"
#include "diaevents.h"
#include "diatariffs.h"
#include "interface_repts.h"
#include "base.h"
#include <QAction>
#include <QMenu>
#include <QContextMenuEvent>
#include <QEvent>
#include <QDir>
#include <QFile>
#include <QTranslator>
#include <QMessageBox>
#include "diawait.h"

#define ESTATE_OPENED 0
#define ESTATE_CLOSED 1
#define ESTATE_HIDED 2

#define UTYPE_USER 0
#define UTYPE_ADMIN 1

#define SALE_STAGE_0 0
#define SALE_STAGE_1 1
#define SALE_STAGE_2 2
#define SALE_STAGE_3 3
#define RE_STAGE_1 4
#define RE_STAGE_2 5
#define USER_TR_1 6

namespace Ui {
class MWin;

}

class MWin : public QMainWindow
{
    Q_OBJECT
    xmlrpc::Client * xmlclient;
    // список id текущих действий.
    int id_logon;
    int id_getuserslist;
    int id_adduser;
    int id_edituser;
    int id_deluser;
    int id_adminEventsGet;
    int id_adminEventAdd;
    int id_adminEventAddTL;
    int id_adminEventEdit;
    int id_adminEventEditTL;
    int id_adminEventEditTEL;
    int id_adminEventDel;


    int id_admTariffsGet;
    int id_admTariffsAdd;
    int id_admTariffsEdit;
    int id_admTariffsDel;

    int id_userEventsList;
    int id_userTariffsList;
    int id_userSaleTicket;

    int id_userReTicketInfo;
    int id_userReTicketBack;

    int id_user_tr;

    bool logonKey;
    bool key_adminEventAdd;
    bool key_11;
    bool key_adminEventEdit2;
    bool key_Sale;
    bool isSaleOK;

    // флаг запросов плагина
    int id_PLugRequest;
    QString currentPLug;
    QString currentPlugRequest;

    QStringList tariffslist;
    QStringList tariffslistEnabled;

    QString hash;
    int usertype;
    QString username;
    QLabel stlabel;
    QString lang;

    QAction * actAddUser;
    QAction * actEditUser;
    QAction * actDelUser;

    QAction * actAdminEventsAdd;
    QAction * actAdminEventsEdit;
    QAction * actAdminEventsDublicate;
    QAction * actAdminEventsDelete;

    QAction * actAdmTariffsAdd;
    QAction * actAdmTariffsEdit;
    QAction * actAdmTariffsDel;

    QString ticketNumber;
    QString tuid;
    QList<iface_rept*> reptList;

    // диалог ожидания для логона
    DiaWait * dwait;
    // флаг наличия ошибки
    bool isWrkErr;
    QString lastError;

    bool eventFilter(QObject *obj, QEvent *event);
public:
    explicit MWin(QWidget *parent = 0);
    void start();
    ~MWin();
    
private:
    Ui::MWin *ui;
    //void contextMenuEvent(QContextMenuEvent *event);
signals:
    void sigPlugReguestFinish(const QString &plugName, const QString &requestName, QStringList params);

private slots:
    void slotDone(int id, QVariant variant );
    void slotFail(int id, int errcode, QString errstr);

    // слоты для работы с плагинами отчетов
    void slotPlugRequestStart(const QString &plugName, const QString &requestName, QStringList params);

    // menu slots
    void slotAddUser();
    void slotEditUser();
    void slotDelUser();
    // menu slots
    void slotAdminEventsAdd();
    void slotAdminEventsEdit();
    void slotAdminEventsDublicate();
    void slotAdminEventsDelete();
    //menu slots
    void slotAdmTariffsAdd();
    void slotAdmTariffsEdit();
    void slotAdmTariffsDel();

    //
    void slottabW_admin();
    void slotEventsAdminSetCurrentMonth();
    void slotAdminEventsUpdate();
    void slotAdmTariffsUpdate();

    // user sale
    void slotSaleStage1();
    void slotSaleStage1back();
    void slotSaleStage1next();
    void slotSaleStage2back();
    void slotSaleStage2next();
    void slotEventsUserSetCurrentWeek();
    void slotSaleUpdateEventsList();
    void slotSaleUpdateTariffsList();
    void slotSalePrint();
    void slotSaleStage2cancel();
    // user re
    void slotReStage1();
    void slotReStage1back();
    void slotReStage1next();
    void slotReStage2back();
    void slotReStage2cancel();
    void slotReStage2next();

    // user report
    void slotUser_tr();
    void slotUser_tr_getlist();
    void slotUser_tr_currentWeek();
    // admin - reports
    void slotReport();

    // abouts
    void slotAboutQt();
    void slotAbout();

};

#endif // MWIN_H
